﻿using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.Linq;
using System.Web;

namespace FlyingCircusWebIS.Models
{
    public class ModeloAeronaveDAO : IModeloAeronaveDAO
    {

        public void Adicionar(ModeloAeronave entidade)
        {
            string sqlInserir = "Insert into ModeloAeronave (IdModeloAeronave, Prefixo, VelocidadeMedia, Assentos, NomeArquivoImagem)"
                                                   + "Values (seqModeloAeronave.NEXTVAL,?,?,?,'')";

            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlInserir;

            OleDbParameter pPrefixo = new OleDbParameter("Prefixo", OleDbType.VarChar);
            pPrefixo.Value = entidade.Prefixo;
            comando.Parameters.Add(pPrefixo);

            OleDbParameter pVelocidadeMedia = new OleDbParameter("VelocidadeMedia", OleDbType.Integer);
            pVelocidadeMedia.Value = entidade.VelocidadeMedia;
            comando.Parameters.Add(pVelocidadeMedia);

            OleDbParameter pAssentos = new OleDbParameter("Assentos", OleDbType.Integer);
            pAssentos.Value = entidade.Assentos;
            comando.Parameters.Add(pAssentos);

            comando.ExecuteNonQuery();
            comando.Dispose();

        }

        public void Atualizar(ModeloAeronave entidade)
        {
            string sqlAtualizar = "Update ModeloAeronave SET Prefixo = ?, Assentos = ?, VelocidadeMedia = ? "
                                    + "Where IdModeloAeronave = ?";

            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlAtualizar;

            OleDbParameter pPrefixo = new OleDbParameter("Prefixo", OleDbType.VarChar);
            pPrefixo.Value = entidade.Prefixo;
            comando.Parameters.Add(pPrefixo);

            OleDbParameter pAssentos = new OleDbParameter("Assentos", OleDbType.Integer);
            pAssentos.Value = entidade.Assentos;
            comando.Parameters.Add(pAssentos); 
            
            OleDbParameter pVelocidadeMedia = new OleDbParameter("VelocidadeMedia", OleDbType.Integer);
            pVelocidadeMedia.Value = entidade.VelocidadeMedia;
            comando.Parameters.Add(pVelocidadeMedia);

            OleDbParameter pIdModeloAeronave = new OleDbParameter("IdModeloAeronave", OleDbType.Integer);
            pIdModeloAeronave.Value = entidade.IdModeloAeronave;
            comando.Parameters.Add(pIdModeloAeronave);

            //Update
            comando.ExecuteNonQuery();
            comando.Dispose();
        }

        public List<ModeloAeronave> Listar()
        {
            String sqlConsulta = "select * from ModeloAeronave";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlConsulta;

            // Select
            OleDbDataReader dr = comando.ExecuteReader();

            List<ModeloAeronave> registros = new List<ModeloAeronave>();
            while (dr.Read())
            {
                ModeloAeronave registro = ConverterDataReaderParaObj(dr);
                registros.Add(registro);
            }
            dr.Close();
            comando.Dispose();

            return registros;
        }

        private ModeloAeronave ConverterDataReaderParaObj(OleDbDataReader dr)
        {
            ModeloAeronave registro = new ModeloAeronave();
            registro.IdModeloAeronave = Int32.Parse(dr["IdModeloAeronave"].ToString());
            registro.Prefixo = dr["Prefixo"].ToString();
            registro.VelocidadeMedia = Int32.Parse(dr["VelocidadeMedia"].ToString());
            registro.Assentos = Int32.Parse(dr["Assentos"].ToString());
            registro.NomeArquivoImagem = dr["NomeArquivoImagem"].ToString();

            return registro;
        }

        public ModeloAeronave BuscarPorId(int id)
        {
            string sqlBuscar = "select * from ModeloAeronave where IdModeloAeronave = ?";
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlBuscar;

            OleDbParameter pId = new OleDbParameter("IdModeloAeronave", OleDbType.Integer);
            pId.Value = id;
            comando.Parameters.Add(pId);

            OleDbDataReader dr = comando.ExecuteReader();

            ModeloAeronave registro = new ModeloAeronave();
            while (dr.Read())
            {
                registro.IdModeloAeronave = int.Parse(dr["IdModeloAeronave"].ToString());
                registro.Prefixo = dr["Prefixo"].ToString();
                registro.VelocidadeMedia = int.Parse(dr["VelocidadeMedia"].ToString());
                registro.Assentos = int.Parse(dr["Assentos"].ToString());
                //registro.NomeArquivoImagem = dr["NomeArquivoImagem"].ToString();
            }
            dr.Close();
            comando.Dispose();

            return registro;
        }

        public void RemoverPorId(int id)
        {
            string sqlDeletar = "Delete ModeloAeronave where IdModeloAeronave = ?";

            // Configura o comando
            OleDbCommand comando = new OleDbCommand();
            comando.Connection = GerenciadorConexao.Conexao;
            comando.CommandText = sqlDeletar;

            OleDbParameter pId = new OleDbParameter("IdModeloAeronave", OleDbType.VarChar);
            pId.Value = id;
            comando.Parameters.Add(pId);


            // Delete
            comando.ExecuteNonQuery();
            comando.Dispose();
        }
    }
}